package com.vshop.framework.mybatisflex.strategy;

import com.mybatisflex.core.datasource.DataSourceShardingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Method;

/**
 * 数据源分片策略
 */
public class MybatisFlexDataSourceStrategy implements DataSourceShardingStrategy {

    /**
     * 数据源分片
     *
     * @param currentDataSourceKey 当前数据源key
     * @param mapper               当前mapper对象
     * @param mapperMethod         当前mapper方法
     * @param methodArgs           当前mapper方法参数
     * @return 数据源key
     */
    @Override
    public String doSharding(String currentDataSourceKey, Object mapper, Method mapperMethod, Object[] methodArgs) {
        // 如果是其他数据源可基于currentDataSourceKey进行判断
        // 如果是增删改操作，则走主库
        if (StringUtils.startsWithAny(mapperMethod.getName(), "insert", "update", "delete")) {
            return "master";
        }
        // 如果是查询操作，则走从库
        return "slave*";
    }
}
